home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1993 / MacHack 1993.toast / MacHack™ 1987-1992 / MacHack™ '90 / Source Code ƒ / MPW C ƒ / C Include ƒ / Source Files / locate.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-12-24  |  960 b   |  56 lines  |  [TEXT/MPS ]

  1. #include <Memory.h>
  2. #include <StdIO.h>
  3. #include "CIncludesCode.h"
  4.  
  5. extern Handle            database;
  6. extern dataHeaderType    dataHeader;
  7.  
  8.  
  9.  
  10. char *getDictionaryPtr( char ch )
  11. {
  12.     long        offset;
  13.  
  14.     offset = dataHeader.dictionaryOffsets[ dictionaryIndex( ch ) ];
  15.     return ( StripAddress(*database) + offset );
  16. }
  17.  
  18.  
  19. char *getNamePtr( short index )
  20. {
  21.     strArray    *sp = (strArray*) (*database + dataHeader.nameArrayOffset);
  22.  
  23.     return ( (char*) ((*sp)[index]) );
  24. }
  25.  
  26.  
  27. char *search( char *s, char* dictPtr )      // returns pointer or NIL
  28. {
  29.     char *p     = dictPtr + 6;
  30.     char *limit    = dictPtr + *((long*) dictPtr);
  31.  
  32.     if ( *s )
  33.         while ( p < limit )
  34.             if ( strcmp( p, s ) == 0 )
  35.                 return ( p - 2 );
  36.             else
  37.                 p += strlen( p ) + 3;
  38.     return 0;
  39. }
  40.  
  41.  
  42. Boolean    locateIdentifier( char *dest, char *src )
  43. {
  44.     char *entryPtr = search( src, getDictionaryPtr( *src ) );
  45.     char *p;
  46.  
  47.     if ( entryPtr )
  48.     {
  49.         p = getNamePtr( getShort( entryPtr ) );
  50.         strcpy( dest, p );
  51.     }
  52.  
  53.     return ( (Boolean) entryPtr );
  54. }
  55.  
  56.